package producto;

//import java.util.ArrayList;
//import java.util.List;


public class Oferta implements IProducto{
	
	private int cantidadDeOfertasDisponibles;
	int porcentajeDescuento;
	Pedido productos;
	
	
	//TODO
	//Las cantidades en Stock del paquete de la oferta deberian poder ser satisfechas
	//Por los productos que contienen!!!
	//o dar una excepcion
	
	public Oferta(int cantidadEnStock,int porcentajeDescuento, IProducto iProducto){
		this.porcentajeDescuento = porcentajeDescuento;
		this.setCantidadEnStock(cantidadEnStock);
		productos = new Pedido();
		productos.agregar(iProducto);
	
	}
	public Oferta(int cantidadEnStock,int porcentajeDescuento, Pedido unPedido){
		this.porcentajeDescuento = porcentajeDescuento;
		this.setCantidadEnStock(cantidadEnStock);
		productos = new Pedido();
		productos = unPedido;
	}
	
	public double precioUnitarioDeVenta() {
		double valorSinDescuento = this.getPedido().precioDeVentaTotal();
		double descuento = (valorSinDescuento*getPorcentajeDescuento())/100;
		return valorSinDescuento-descuento;
		
	}

	private int getPorcentajeDescuento() {
		return this.porcentajeDescuento;
	}

	private void setCantidadEnStock(int i) {
		this.cantidadDeOfertasDisponibles = i;
	}

	private Pedido getPedido() {
		return this.productos;
	}
	
	@Override
	public int getCantidadEnStock() {
		//Deberia ser la cantidad en stock del producto de la oferta con menor stock OK
		//si el producto se repite entonces no representa la realidad :(
		
		int buscandoElMenor=this.cantidadDeOfertasDisponibles;
				
		//this.cantidadEnStock=0; //FAKE
		//List<Integer> cantidades = new ArrayList<Integer>();
		
		for (IProducto o : this.getPedido().getListaDeProductos()){
			if (o.getCantidadEnStock()<buscandoElMenor){
				buscandoElMenor=o.getCantidadEnStock();
			}
		}
		
		return buscandoElMenor;
	}

	@Override
	public void incrementarStock() {
		//Se utiliza en ventas!!!
		//para las cancelaciones!
		//cuando los pedidos retornan los productos
		this.setCantidadEnStock(this.getCantidadEnStock()+1);
		this.getPedido().retornarProductos();
	}
	
	@Override
	public void decrementarStock() {
		this.setCantidadEnStock(this.getCantidadEnStock()-1);
		this.getPedido().descontarStock();
	}
	
	@Override
	public IProducto duplicar() {
		// TODO Auto-generated method stub
		Oferta copia = new Oferta(this.getCantidadEnStock(),
				this.getPorcentajeDescuento(),
				this.getPedido().duplicar());
		return copia;
	}
	
	@Override
	public int getStockMinimo() {
		return 0;
	}
	@Override
	public int getStockCritico() {
		return 0;
	}

}
